<?php

declare (strict_types = 1);

// 应用公共函数库文件

/**
 * 获取当前访问的渠道(微信小程序、H5、APP等)
 * @return string|null
 */
function getPlatform()
{
    static $value = null;
    // 从header中获取 channel
    empty($value) && $value = request()->header('platform');
    // 调试模式下可通过param中获取
    if (empty($value)) {
        $value = request()->param('platform');
    }
    return $value;
}


//二维数组销毁相同元素

// function array_unset_same($arr,$key='goods_id'):array
// {
//     //建立一个目标数组
//     $res = array();
//     foreach ($arr as $value) {
//         //查看有没有重复项
//         if(isset($res[$value[$key]]) && strlen($value['code']) == 4){
//             unset($value[$key]);  //有：销毁
//         }else{
//             $res[$value[$key]] = $value;
//         }
//     }
//     return $res;
// }

function array_unset_same($arr,$key ='goods_id',$code = ''):array
{
    $tmp1 = $tmp2 = [];
    foreach ($arr as $value) {
        $tmp1[$value[$key]][] = $value;
    }
    //dd($tmp1);
    foreach ($tmp1 as $item){
        $codes = array_column($item,'code');
        $closest = getClosest($code,$codes);
        $find = array_search($closest,$codes);
       // dd($item,$closest,$find);
        $tmp2[] = $item[$find];
    }


    return $tmp2;
}


//在数组中查询最接近的数字
function getClosest($search, $arr) {
    $closest = null;
    foreach ($arr as $item) {
        if ($closest === null || abs($search - $closest) > abs($item - $search)) {
            $closest = $item;
        }
    }
    return $closest;
}


/***
 * 数组为空追加到末尾
 * @param $array //数组
 * @param $key  //需要比对的键值
 * @return bool
 */
function moveZeroEnd($array, $key){
    if (empty($array)) return [];
    for ($i = 0; $i < count($array) ; $i++) {
        if ($array[$i][$key] == 0) {
            array_push($array, $array[$i]);//把为0的值du追加到末尾zhi
            unset($array[$i]);
        }
    }
    return array_values($array);
}


//生成随机浮点数
function randFloat($st_num = 0,$end_num = 1,$mul = 1000): float
{
    return mt_rand((int)($st_num * $mul),(int)($end_num * $mul)) / $mul;
}
